<?php

class ZendChat_Model_UsersConnectedMapper {

    protected $_dbTable;

    /**
     * Fixe la db-table associé au users connectés
     * @param type $dbTable
     * @return ZendChat_Model_UsersConnectedMapper
     * @throws Exception 
     */
    public function setDbTable($dbTable) {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    /**
     * Retourne la db-table utilisé pour le persistance des users connectés
     * @return ZendChat_Model_DbTable_UsersConnected 
     */
    public function getDbTable() {
        if (null === $this->_dbTable) {
            $this->setDbTable('ZendChat_Model_DbTable_UsersConnected');
        }
        return $this->_dbTable;
    }

    /**
     * Ajoute un utilisateur à la liste des connectés
     * @param string $login le login du user à ajouter
     */
    public function addUser($login) {
        $data = array(
            'login_user' => $login
        );
        try {
            $this->getDbTable()->insert($data);
        }
        catch (Exception $e) {
            Zend_Registry::get('logger')->err("Impossible d'insérer le user ($login) dans la liste des conectés");
        }
    }

    /**
     * Supprime un utilisateur de la liste des connectés
     * @param int $login
     * @return int le nombre de lignes supprimées 
     */
    public function removeUser($login) {
        $where = $this->getDbTable()->getAdapter()->quoteInto('login_user = ?', $login);
        return $this->getDbTable()->delete($where);
    }

    /**
     * Retourne tous les users connectés
     * @return type 
     */
    public function getAllLogins() {
        $resultSet = $this->getDbTable()->fetchAll();
        $logins = array();
        foreach ($resultSet as $row) {
            $login = $row->login_user;
            $logins[] = $login;
        }
        return $logins;
    }

}

